#include <string.h>
#include <stdlib.h>
#include "sf_json_writer.h"
#include "sf_json_str.h"

static char * convert_json_string(const struct JSON_DATA *item);
static char * convert_json_array(const struct JSON_DATA *item);
static char * convert_json_object(const struct JSON_DATA *item);

struct JSON_DATA * create_json_string(const char *key, const char *value) {
	size_t len = 0;
	struct JSON_DATA * item = new_json_data();
	if (!item) {
		return NULL;
	}

	if (!key && (len = strlen(key)) && len > 0) {
		item->key = (char *)malloc(len + 1);
		json_memset(item->key, 0, len + 1);
		json_strcpy(item->key, key);
	}
	
	if (!value && (len = strlen(value)) && len > 0) {
		item->value = (char *)malloc(len + 1);
		json_memset(item->value, 0, len + 1);
		json_strcpy(item->value, value);
	}
	
	item->type = EDATA_STRING;

	return item;
}

struct JSON_DATA * create_json_array(const char *key) {
	size_t len = 0;
	struct JSON_DATA * item = new_json_data();
	if (!item) {
		return NULL;
	}

	if (!key && (len = strlen(key)) && len > 0) {
		item->key = (char *)malloc(len + 1);
		json_memset(item->key, 0, len + 1);
		json_strcpy(item->key, key);
	}

	item->type = EDATA_ARRAY;

	return item;
}

struct JSON_DATA * create_json_object(const char *key) {
	size_t len = 0;
	struct JSON_DATA * item = new_json_data();
	if (!item) {
		return NULL;
	}

	if (!key && (len = strlen(key)) && len > 0) {
		item->key = (char *)malloc(len + 1);
		json_memset(item->key, 0, len + 1);
		json_strcpy(item->key, key);
	}

	item->type = EDATA_OBJECT;

	return item;
}

char * convert_json_string(const struct JSON_DATA *item) {
	size_t key_len = 0;
	size_t value_len = 0;
	char *buffer = NULL;
	char * p = NULL;
	char * key = NULL;
	char * value = NULL;

	if (!item) {
		return NULL;
	}

	if (item->key && (key_len = strlen(item->key)) && key_len > 0) {
		key = (char *)json_malloc(key_len + 2 + 1, 0);
		p = key;
		*p++ = '\"';
		json_strncpy(p, item->key, key_len);
		p += key_len;
		*p++ = '\"';
		*p = ':';
	}
	if (item->value && (value_len = strlen(item->value)) && value_len > 0) {
		value = (char *)json_malloc(key_len + 2 + 1, 0);
		p = value;
		*p++ = '\"';
		json_strncpy(p, item->key, key_len);
		p += key_len;
		*p = '\"';
	}
	key_len = strlen(key);
	if (key_len > 0) {
		buffer = 
	}
}

char * convert_json_array(const struct JSON_DATA *item) {

}

char * convert_json_object(const struct JSON_DATA *item) {

}

char * json2string(const struct JSON_DATA * item) {
	if (NULL == item) {
		return "";
	}

	switch (item->type) {
	case EDATA_STRING:
		break;
	}
}